package com.qd.flow.mapper.bill;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qd.common.flow.domain.bill.FlowBillDTO;
import com.qd.common.flow.domain.bill.FlowQueryDTO;
import com.qd.common.flow.domain.bill.ProcessTreeDTO;
import com.qd.common.flow.domain.index.ProcessCountDTO;
import com.qd.flow.model.bill.FlowBill;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 审批业务
 *
 * @author sjk
 */
public interface FlowBillMapper extends BaseMapper<FlowBill> {
    /**
     * 分页
     *
     * @param page  分页属性
     * @param query 查询条件
     * @return 数据
     */
    IPage<FlowBillDTO> page(IPage<FlowBill> page, @Param(Constants.WRAPPER) Wrapper<FlowBill> query);

    /**
     * 待办任务列表
     * @param page 分页属性
     * @param query 查询条件
     * @return 数据
     */
    IPage<FlowBillDTO> toDoTaskPage(IPage<FlowBill> page, @Param(Constants.WRAPPER) Wrapper<FlowQueryDTO> query);

    /**
     * 已办任务列表
     * @param page 分页属性
     * @param query 查询条件
     * @return 数据
     */
    IPage<FlowBillDTO> completedTaskPage(Page<FlowBill> page, @Param(Constants.WRAPPER) QueryWrapper<FlowQueryDTO> query);
    /**
     * 按流程ID查询数量
     *
     * @param query 查询条件
     * @return 数据
     */
    List<ProcessCountDTO> countByProcessId(@Param(Constants.WRAPPER) Wrapper<FlowBill> query);

    /**
     * 查询已办任务条数
     * @param query 查询条件
     * @return 数据
     */
    Long hisTaskCount(@Param(Constants.WRAPPER) Wrapper<FlowBill> query);

    /**
     * 流程树
     *
     * @param billId 审批业务ID
     * @return 数据
     */
    List<ProcessTreeDTO> processTree(@Param("billId") String billId, @Param("processId")String processId);


}